// TileSystem.js

class TileSystem {
    /**
     * 计算覆盖的切片范围
     * @param {Number} centerLat - 中心点纬度
     * @param {Number} centerLng - 中心点经度
     * @param {Number} zoom - 缩放级别
     * @param {Number} imageWidth - 图像宽度（像素）
     * @param {Number} imageHeight - 图像高度（像素）
     * @param {Number} scale - 每像素对应的地面距离（米/像素）
     * @returns {Object} - 切片范围 { minX, maxX, minY, maxY }
     */
    calculateTileCoverage(centerLat, centerLng, zoom, imageWidth, imageHeight, scale) {
        throw new Error('Method "calculateTileCoverage"必须被实现。');
    }

    /**
     * 获取切片的地理范围
     * @param {Number} tileX - 切片 X 坐标
     * @param {Number} tileY - 切片 Y 坐标
     * @param {Number} zoom - 缩放级别
     * @returns {Object} - 切片的西北角和东南角经纬度 { nw: {lat, lng}, se: {lat, lng} }
     */
    getTileBounds(tileX, tileY, zoom) {
        throw new Error('Method "getTileBounds"必须被实现。');
    }

    /**
     * 获取每像素的地面距离（米/像素）
     * @param {Number} lat - 纬度
     * @param {Number} zoom - 缩放级别
     * @returns {Number} - 米/像素
     */
    getMetersPerPixel(lat, zoom) {
        throw new Error('Method "getMetersPerPixel"必须被实现。');
    }
}

module.exports = TileSystem;
